
package edu.uoc.tdp.servidor.impl.estudiants;

import edu.uoc.tdp.common.EOlympicsException;
import edu.uoc.tdp.common.EOlympicsExceptionProva;
import edu.uoc.tdp.common.RemotEstudiantsInterface;
import edu.uoc.tdp.bbdd.GestorDiscConnexio;
import edu.uoc.tdp.beans.estudiants.Inscripcio;
import edu.uoc.tdp.beans.proves.Prova;
import edu.uoc.tdp.servidor.bbdd.estudiants.GestorEstudiants;
import java.io.Serializable;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.sql.Date;
import java.sql.SQLException;
import java.util.List;

/**
 * Classe que implementa l'interfície RemotEstudiantsInterface
 * Es definiran tots els mètodes que necessitem per fer servir a la
 * capa de presentació. Per accedir a BBDD sempre haurem de passar per 
 * la classe GestorEstudiants corresponent
 * @author Grup TDP 1X4J
 */
public class RemotEstudiantsImpl extends UnicastRemoteObject 
                           implements RemotEstudiantsInterface, Serializable    
{
    
    private static final long serialVersionUID = 1L;
    private GestorDiscConnexio gestorBD;

    /**
     * Constructor de la clase<br>
     * Crea una conexió a la Base de Dades
     * @exception RemoteException
     * @exception EOlympicsException
     */    
    public RemotEstudiantsImpl() throws RemoteException, EOlympicsException {
        super();
        gestorBD = new GestorDiscConnexio();
        gestorBD.obreConnexioBD();
    }

    
     /**
     * Obté les proves 
     * @return List<Prova> 
     * @exception RemoteException
     * @exception EOlympicsException
     */  
    @Override
    public List<Prova> ObtenirProves() throws RemoteException, EOlympicsException {
       
        GestorEstudiants gestestudiants = new GestorEstudiants();
        return gestestudiants.getProvesInscripcio();
        
      }
    
    @Override
    public Date ObtenirDataInscripcio(Integer pidProva, Integer pidEstudiant) throws RemoteException, EOlympicsException{
       GestorEstudiants gestestudiants = new GestorEstudiants();
       return gestestudiants.getDataInscEstudiant(pidProva,pidEstudiant);
    }
    
    @Override
    public List<Inscripcio> ObtenirInscrits(Integer pidProva) throws RemoteException, EOlympicsException {
      
       GestorEstudiants gestestudiants = new GestorEstudiants();
       return gestestudiants.getInscrits(pidProva);
       
    }
    
    @Override
    public boolean Inscriure(Integer pidProva, Integer pidEstudiant) throws RemoteException, EOlympicsException{
       GestorEstudiants gestestudiants = new GestorEstudiants();
       return gestestudiants.inscriure(pidProva,pidEstudiant);
    }
    
    @Override
    public boolean Esborrar(Integer pidProva, Integer pidEstudiant) throws RemoteException, EOlympicsException{
       GestorEstudiants gestestudiants = new GestorEstudiants();
       return gestestudiants.esborrar(pidProva,pidEstudiant);
    }
    
    @Override
    public List<Prova> ProvesAmbInscripcio(Integer pidEstudiant) throws RemoteException, EOlympicsException{
       GestorEstudiants gestestudiants = new GestorEstudiants();
       return gestestudiants.getProvesAmbInscripcio(pidEstudiant);
    }
    
    @Override
    public List<Prova> ProvesInscrites(Integer pidEstudiant) throws RemoteException, EOlympicsException{
       GestorEstudiants gestestudiants = new GestorEstudiants();
       return gestestudiants.getProvesInscrit(pidEstudiant);
    }
    
    @Override
    public List<Prova> ProvesFinalitzades(Integer pidEstudiant) throws RemoteException, EOlympicsException{
       GestorEstudiants gestestudiants = new GestorEstudiants();
       return gestestudiants.getProvesFinalitzades(pidEstudiant);
    }    
    
    @Override
    public boolean EntradaPregunta(Integer pidProva, String TipusRonda, Integer pidEstudiant, int numpregunta, String resposta) throws SQLException,RemoteException, EOlympicsException, EOlympicsExceptionProva{
       GestorEstudiants gestestudiants = new GestorEstudiants();
       return gestestudiants.EntrarPregunta(pidProva,TipusRonda,pidEstudiant,numpregunta,resposta);
    }
    
    @Override
    public boolean ComprovaInscripcio(Integer pidProva, Integer pidEstudiant) throws RemoteException, EOlympicsException{
       GestorEstudiants gestestudiants = new GestorEstudiants();
       return gestestudiants.ComprovaInscripcio(pidProva, pidEstudiant);
    }
    
    @Override
    public String RespostaPregunta(Integer pidProva, String TipusRonda, Integer pidEstudiant, int numpregunta) throws SQLException,RemoteException, EOlympicsException, EOlympicsExceptionProva{
       GestorEstudiants gestestudiants = new GestorEstudiants();
       return gestestudiants.RespostaPregunta(pidProva, TipusRonda, pidEstudiant,numpregunta);
    }

    @Override
    public String RespostaCorrecta(Integer pidProva, String TipusRonda, int numpregunta) throws SQLException,RemoteException, EOlympicsException {
        GestorEstudiants gestestudiants = new GestorEstudiants();
        return gestestudiants.RespostaCorrecta(pidProva, TipusRonda,numpregunta);
    }
    
    @Override
    public boolean ComprovaParticipacio(Integer pidProva, String TipusRonda, Integer pidEstudiant) throws RemoteException, EOlympicsException{
       GestorEstudiants gestestudiants = new GestorEstudiants();
       return gestestudiants.ComprovaParticipacio(pidProva, TipusRonda, pidEstudiant);
    }
    
    @Override
    public boolean ComprovaRealitzacio(Integer pidProva, String TipusRonda, Integer pidEstudiant) throws RemoteException, EOlympicsException{
       GestorEstudiants gestestudiants = new GestorEstudiants();
       return gestestudiants.ComprovaRealitzacio(pidProva, TipusRonda, pidEstudiant);
    }
    
    @Override
    public List<Prova> ProvesInscritesTotals(Integer pidEstudiant) throws RemoteException, EOlympicsException{
       GestorEstudiants gestestudiants = new GestorEstudiants();
       return gestestudiants.getProvesInscritesTotals(pidEstudiant);
    }
    
    @Override
    public boolean MarcaParticipacio(Integer pidProva, String TipusRonda, Integer pidEstudiant) throws SQLException, RemoteException, EOlympicsException{
       GestorEstudiants gestestudiants = new GestorEstudiants();
       return gestestudiants.MarcaParticipacio(pidProva, TipusRonda, pidEstudiant);
    }
}
